﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace GestioneStatisticheVendita
{
    static class GestioneFile
    {
        static string patch = @"c:\document\minni\";
        static string Nome = "Prodotti.txt";
        static string n  = patch + Nome;
        
        // vediamo le lunghezze delli campi
        
           public  static void Makedirectory()
        {
           try
            {
                Directory.CreateDirectory(patch);
                FileStream fs = File.Create(n);
                fs.Close();
            }catch(IOException e)
            {
                Console.WriteLine(e.Message); 
            }

        }
       
        static int[] lunghezza = { 5, 1, 3, 2, 10 };
        static public void Salva_Dati(Prodotto a)
        {
            try
            {
                /*   record: nome,    tipo,   pos,    lunghezza,  descrizione
                 *          Codice    S       0         5           Codice prodotto
                 *         Tipo       C       5         1            Tipo prodotto
                 *         Quantità   I       6         3           Quantità prodotto
                 *         Peso       I       9         2             Peso
                 *         Importo    D       11       10              Importo
                 *         // C= confezzionati, N= non confezzionati
                */
                string codice = null;
                char tipo = ' ';
                string quantità = null;
                string peso = null;
                string importo = null;

                

                string record;

                // carico i dati che poi dovro scrivere nel record 
                if (a is ProdottiConfezzionati)
                {
                    ProdottiConfezzionati z = (ProdottiConfezzionati)a;
                    codice = z.Codice;
                    tipo = 'C';
                    quantità = z.Quantità.ToString();
                    peso = z.Peso.ToString();
                    importo = z.Prezzo.ToString();
                }
                if (a is ProdottiNonConfezzionati)
                {
                    ProdottiNonConfezzionati q = (ProdottiNonConfezzionati)a;
                    codice = q.Codice;
                    tipo = 'N';
                    quantità = q.Quantità.ToString();
                    peso = q.Peso.ToString();
                    importo = q.Prezzo.ToString();
                }
                // controllo i dati 
                if (codice.Length > lunghezza[0])
                {
                    codice = codice.Remove(lunghezza[0]);
                }
                if (quantità.Length > lunghezza[2])
                {
                    quantità = quantità.Remove(lunghezza[2]);
                }
                if (peso.Length > lunghezza[3])
                {
                    peso = peso.Remove(lunghezza[3]);
                }
                if (importo.Length > lunghezza[4])
                {
                    importo = importo.Remove(lunghezza[4]);
                }
                // scrivo i dati nel mio record 
                record = codice.PadRight(lunghezza[0], ' ') + tipo.ToString().PadRight(lunghezza[1], ' ') + quantità.PadRight(lunghezza[2], ' ')
                    + peso.PadRight(lunghezza[3], ' ') + importo.PadRight(lunghezza[4], ' ')+System.Environment.NewLine;
                //apro il file
                StreamWriter sw = new StreamWriter(n, true);
                // scrivo su file
                sw.Write(record);

                // chiudo il file
                sw.Close();
            }catch(IOException e)
            {
                Console.WriteLine(e.Message);
            }

         }
        public static List<Prodotto> Leggi()
        {
            try
            {
                List<Prodotto> p = new List<Prodotto>();
                string[] campi;
                string record;
                StreamReader se = new StreamReader(n);
                while ((record = se.ReadLine()) != null)
                {
                    campi = Ricava_campi(record);
                    if (campi[1] == "C")
                    {
                        p.Add(new ProdottiConfezzionati(campi[0], Convert.ToInt32(campi[2]), Convert.ToDouble(campi[3]), Convert.ToInt32(campi[4])));
                    }
                    if (campi[1] == "N")
                    {
                        p.Add(new ProdottiNonConfezzionati(campi[0], Convert.ToInt32(campi[2]), Convert.ToDouble(campi[3]), Convert.ToInt32(campi[4])));
                    }
                }
                return p;
            }catch(IOException e)
            {
                Console.WriteLine(e.Message);
            }
            return null;
        }

        private static string[] Ricava_campi(string record)
        {
            string[] campi = new string[lunghezza.Length];
            int i = 0;
            int pos = 0;
            int j = 0;
            do
            {
                // metto nella poszione 0 la stringa della poszione 0
                campi[j] = record.Substring(pos, lunghezza[i]);
                // levo lo spazio
                campi[j] = campi[j].TrimEnd(' ');
                // incremento j cosi da portarmi avanti le posizoni
                j++;
                // porto poszione alla lunghezza della posizone i
                pos += lunghezza[i];
                // aumento i
                i++;

            } while (i < lunghezza.Length);
            return campi;
        }

    }
    
}
